[アップデート] Amazon SES が送信時のインラインテンプレート機能に対応しました

[アップデート] Amazon SES が送信時のインラインテンプレート機能に対応しました

Clock Icon2024.11.05

いわさです。

今朝、Amazon SES でインラインテンプレートがサポートされたというアナウンスがありました。

https://aws.amazon.com/about-aws/whats-new/2024/11/amazon-ses-inline-template-support-send-email-apis/

まず、従来より Amazon SES ではメールテンプレート機能がサポートされていました。
メール本文や件名プレースホルダーを埋め込んだテンプレートを事前に用意し、メール送信時にはテンプレートを指定しつつ動的に変更する必要がある変数部分のみを指定します。

https://dev.classmethod.jp/articles/amazon-ses-personalized-template/

今回のアップデートにより、事前に準備したテンプレートを指定するのではなく、メール送信時にテンプレート内容を入力出来るようにもなりました。

メール送信の仕組みが必要な多くのアプリケーションでは、テンプレート機能が有効です。
SES のテンプレート機能を使う場合は事前にテンプレート作成 API を使って SES 上にテンプレートを登録する必要があります。
しかし、場合によっては SES の API ではなく独自でテンプレートを管理したい場合がありました。
また、SES で管理出来るテンプレートはリージョンあたり 20,000 個までという上限もありました。

今回のインラインテンプレート機能を使うと、SES 側でのテンプレート管理が不要になるのでメール送信側に任せることができます。
そしてメールテンプレート数の上限も気にしなくてよくなります。

また、従来のテンプレートサイズはテキストと HTML 含めて 500 KB が最大だったのですが、インラインテンプレートの場合は 1 MB まで使えるそうです。

今回こちらのインラインテンプレートによる送信機能を試しましたので紹介します。

従来のテンプレート送信

これまでのテンプレート送信を行う場合は事前に SES 上へテンプレートの登録が必要です。

0A4FD535-06A4-4850-8287-AC0AB0A4154A.png

テンプレートの内容としては次のようにプレースホルダを埋め込んだ件名、本文(HTML + Text)を用意します。

% aws-v1 sesv2 get-email-template --template-name hoge0520template2
{
    "TemplateName": "hoge0520template2",
    "TemplateContent": {
        "Subject": "{{hoge}}: subject",
        "Text": "{{fuga}}: text",
        "Html": "<b>{{fuga}}: html</b>"
    }
}

あとはメール送信 API で送信する際にテンプレートと、変数部分の値を指定します。

% cat hoge.json
{
    "FromEmailAddress": "hoge1105@mail1.tak1wa.com",
    "Destination": {
        "ToAddresses": [
            "hoge@example.com"
        ]
    },
    "Content": {
        "Template": {
            "TemplateName": "hoge0520template2",
            "TemplateData": "{ \"hoge\":\"aaa\", \"fuga\": \"bbb\" }"
        }
    }
}
% aws-v1 sesv2 send-email --cli-input-json file://hoge.json
{
    "MessageId": "01060192f8f0c1c2-90abeb03-33ce-4d0b-90b0-a2f7ecb0bc9f-000000"
}

そうするとプレースホルダ部分に指定した値が埋め込まれたメールが送信されます。

F828EF83-C21E-4F2D-BF75-000609E33F57.png

インラインテンプレート送信

今回のアップデートがこちらです。
SES v2 API でコンテンツのテンプレートパラメータ内にテンプレート名ではなくテンプレート内容を指定出来るようになりました。
TemplateDataの指定は同じです。

% cat hoge2.json
{
    "FromEmailAddress": "hoge1105@mail1.tak1wa.com",
    "Destination": {
        "ToAddresses": [
            "hoge@example.com"
        ]
    },
    "Content": {
        "Template": {
            "TemplateContent": {
                "Subject": "{{hoge}}: subject2",
                "Text": "{{fuga}}: text2",
                "Html": "<b>{{fuga}}: html2</b>"
            },
            "TemplateData": "{ \"hoge\":\"ccc\", \"fuga\": \"ddd\" }"
        }
    }
}
% aws-v1 sesv2 send-email --cli-input-json file://hoge2.json
{
    "MessageId": "01060192f8f17e78-ab3b1636-855b-4c02-8ea8-40ee20c94af5-000000"
}

同じように指定した値が埋め込まれたメールが送信されました。

D7718497-5AEE-429E-AD11-2DD9A337BB90.png

さいごに

本日は Amazon SES が送信時のインラインテンプレート機能に対応したので試してみました。

アプリケーション側でテンプレートを管理したり、あるいはアプリケーション利用ユーザーがテンプレートを入力したいケースに対応出来そうです。
SES でテンプレート管理まではしたくないけど、アプリケーションで毎回本文組み立てまではしたくないなぁという時が私はありましたので、これは使えそうです。

なお、SMTP 送信を使う場合は RAW データによる送信となるため、テンプレート機能が使えないのは従来どおりです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.